#include <bits/stdc++.h>
using namespace std;
struct rec {
  int a;
  int b;
};
rec c[200005];
// 自定义排序，长度短的排在前面，若长度相同，宽度短的排在前面
bool cmp(rec x, rec y) {
  if (x.a < y.a || x.a == y.a && x.b < y.b)
    return true;
  return false;
}

int dp[200005]; // 前i个长方形， 必须当前第i个长方形，得到的最大层数。

int main() {
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> c[i].a >> c[i].b;
  }
  sort(c + 1, c + 1 + n, cmp); // 排序

  dp[1] = 1;
  for (int i = 2; i <= n; i++) {
    dp[i] = 1;
    for (int j = 1; j <= i - 1; j++) {
      if (c[j].b <= c[i].b) {
        dp[i] = max(dp[i], dp[j] + 1);
      }
    }
  }
  int len = 0;
  for (int i = 1; i <= n; i++) {
    len = max(len, dp[i]);
  }

  cout << len;
  return 0;
}